// 引入依赖
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const cors = require('@koa/cors');

// 加载环境变量
require('dotenv').config();

// 引入数据库配置
const { initializeDatabase } = require('./config/db');

// 引入中间件
const errorMiddleware = require('./middlewares/errorMiddleware');

// 引入路由
const authRoutes = require('./routes/authRoutes');
const assessmentRoutes = require('./routes/assessmentRoutes');
const resultRoutes = require('./routes/resultRoutes');
const questionRoutes = require('./routes/questionRoutes');

// 创建 Koa 应用实例
const app = new Koa();

// 设置端口
const PORT = process.env.PORT || 3000;

// 使用中间件
app.use(cors()); // 启用 CORS
app.use(bodyParser()); // 解析请求体
app.use(errorMiddleware); // 错误处理中间件

// 注册路由
app.use(authRoutes.routes()).use(authRoutes.allowedMethods());
app.use(assessmentRoutes.routes()).use(assessmentRoutes.allowedMethods());
app.use(resultRoutes.routes()).use(resultRoutes.allowedMethods());
app.use(questionRoutes.routes()).use(questionRoutes.allowedMethods());

// 根路由
app.use(async (ctx) => {
  if (ctx.path === '/') {
    ctx.status = 200;
    ctx.body = {
      message: '心理测评系统后端服务运行中',
      version: '1.0.0',
      endpoints: [
        '/api/register',
        '/api/login',
        '/api/assessments',
        '/api/results',
        '/api/questions'
      ]
    };
  }
});

// 全局错误处理
app.on('error', (err, ctx) => {
  console.error('服务器错误:', err);
  // 错误日志可以在这里添加到日志系统
});

// 启动服务器和数据库连接
const startServer = async () => {
  try {
    // 初始化数据库
    await initializeDatabase();
    
    // 启动服务器 - 绑定到所有网络接口，允许通过局域网IP访问
    app.listen(PORT, '0.0.0.0', () => {
      console.log(`服务器运行在 http://localhost:${PORT}`);
      console.log(`也可以通过 http://192.168.31.205:${PORT} 访问`);
      console.log('心理测评系统后端服务已启动');
      console.log('API 端点:');
      console.log('- /api/register - 用户注册');
      console.log('- /api/login - 用户登录');
      console.log('- /api/assessments - 测评相关API');
      console.log('- /api/results - 测评结果相关API');
    });
  } catch (error) {
    console.error('启动服务器失败:', error);
    process.exit(1);
  }
};

// 启动服务器
startServer();

module.exports = app;